Shell脚本实战11-菜单自动化软件部署

1. 需求

这是一个综合实例:打印选择菜单,按照选择一键安装不同的Web服务。

要求:

  • 当用户输入1时,输出”start installing lamp.”的提示,然后执行lamp.sh,脚本内容输出”lamp is installed”后退出脚本,也就是实际工作中使用的lamp一键安装脚本。
  • 当用户输入2时,输出”start installing lnmp.”的提示,然后执行lnmp.sh,输出”lnmp is installed”后退出脚本,也就是实际工作中使用的lnmp一键安装脚本。
  • 当输入3时,退出当前菜单及脚本。
  • 当输入任何其它字符时,给出提示:”Input error”后退出脚本。
  • 对要执行的脚本进行相关的条件判断,例如:脚本文件是否存在,是否可执行等判断

2. 脚本实现

准备工作

1
2
3
4
5
6
7
# mkdir -p /server/scripts #<==建立脚本存放路径,可自定义
# cd /server/scripts #<==切换到脚本目录下
# echo "echo lamp is installed" > lamp.sh
#<==模拟lamp脚本输出
# echo "echo lnmp is installed" > lnmp.sh
#<==模拟lnmp脚本输出
# chmod +x lnmp.sh lamp.sh #<==给予执行权限

正式脚本(lanmp.sh)如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash
path=/server/scripts #<==定义脚本路径
[ ! -d "$path" ] && mkdir $path -p
#menu
cat <<END
1. [install LAMP]
2. [install LNMP]
3. [exit]
Please input the num you want:
END
read num #<==接收用户选择的数字
#判断用户输入的数字是否为整数
expr $num + 1 &> /dev/null
[ $? -ne 0 ] && {
echo "the num you input must be {1|2|3}"
exit 1
}
#用户选择1执行lamp脚本
[ $num -eq 1 ] && {
echo "start installing lamp."
sleep 2;
[ -x "$path/lamp.sh" ] || {
echo "$path/lamp.sh does not exist or can not be exec."
exit 1
}
source $path/lamp.sh #<==其实使用这种方法比sh或不叫解释器更好
exit $?
}
#用户选择2执行lnmp脚本
[ $num -eq 2 ] && {
echo "start installing lnmp."
sleep 2;
[ -x "$path/lnmp.sh" ] || {
echo "$path/lnmp.sh does not exist or can not be exec."
exit 2
}
source $path/lnmp.sh #<==其实使用这种方法比sh或不叫解释器更好
exit $?
}
#用户选择3时退出脚本
[ $num -eq 3 ] && {
echo bye.
exit 3
}
#用户输入不等于123的用法:
#用法1
#[[ ! "$num" =~ [1-3 ]] && {
# echo "I guess, you are not man."
#}
#用法2
[[ ! $num =~ [1-3] ]] && {
echo "the num you input must be {1|2|3}"
echo "Input ERROR"
exit 4
}

3. 脚本演示

脚本个数如下:

1
2
# ls
lamp.sh lanmp.sh lnmp.sh

脚本执行结果如下;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# sh lanmp.sh
1. [install LAMP]
2. [install LNMP]
3. [exit]
Please input the num you want:
1
start installing lamp.
lamp is installed
# sh lanmp.sh
1. [install LAMP]
2. [install LNMP]
3. [exit]
Please input the num you want:
2
start installing lnmp.
lnmp is installed
# sh lanmp.sh
1. [install LAMP]
2. [install LNMP]
3. [exit]
Please input the num you want:
3
bye.
# sh lanmp.sh
1. [install LAMP]
2. [install LNMP]
3. [exit]
Please input the num you want:
4
the num you input must be {1|2|3}
Input ERROR

0%